package cn.broadin.app.hotel.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.preference.PreferenceManager;
import android.util.Log;

/**
 * 自定义工具类
 * 
 * @author   long
 * @version  1.0.0
 * @date 2015年9月23日下午2:58:32
 */
public class XUtils {
	
	/**
	 * 根据手机的分辨率从 dp 的单位 转成为 px(像素) 
	 * 
	 * @author   long
	 * @param context
	 * @param dpValue
	 * @return
	 * @return int
	 * @exception
	 * @author   long
	 * @since 1.0.0
	 * @date 2015年9月23日 下午2:59:46
	 */
    public static int dip2px(Context context, float dpValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (dpValue * scale + 0.5f);  
    }  
  
    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 
     * 
     * @author   long
     * @param context
     * @param pxValue
     * @return
     * @return int
     * @exception
     * @author   long
     * @since 1.0.0
     * @date 2015年9月23日 下午2:59:59
     */
    public static int px2dip(Context context, float pxValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (pxValue / scale + 0.5f);  
    }
    
	/**
	 * 读取配置文件参数
	 * 
	 * @author   long
	 * @param context
	 * @param id
	 * @return
	 * @return float
	 * @exception
	 * @author   long
	 * @since 1.0.0
	 * @date 2015年10月27日 下午2:24:46
	 */
	public static float getDimension(Context context, int id){
		return context.getResources().getDimension(id);
	}
    
	/**
	 * 获取APK版本名称
	 * 
	 * @author long
	 * @create 2015年5月7日 下午3:20:10
	 * @since 
	 * @param context
	 * @return
	 */
	public static String getAppVersionName(Context context){
		String versionname = null;
		try{
			PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
			versionname = info.versionName; 
		} catch(Exception e){
			e.printStackTrace();
		}
		return versionname;
	}
	
	/**
	 * 获取APK版本名称
	 * 
	 * @author long
	 * @create 2015年5月7日 下午3:20:10
	 * @since 
	 * @param context
	 * @return
	 */
	public static int getAppVersionCode(Context context){
		int versionCode = 0;
		try{
			PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
			versionCode = info.versionCode; 
		} catch(Exception e){
			e.printStackTrace();
		}
		return versionCode;
	}
	
	/**
	 * 获取APK版本名称
	 * 
	 * @author long
	 * @create 2015年5月7日 下午3:20:10
	 * @since 
	 * @param context
	 * @return
	 */
	public static String getAppPackageName(Context context){
		String packageName = null;
		try{
			PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
			packageName = info.packageName;
		} catch(Exception e){
			e.printStackTrace();
		}
		return packageName;
	}
	
	/**
     * 检查当前网络是否可用
     * 
     * @param
     * @return
     */
    
    public static boolean isNetworkAvailable(Activity activity){
    	Log.d("dyh--isNetworkAvailable-->", "isNetworkAvailable--start");
        Context context = activity.getApplicationContext();
        // 获取手机所有连接管理对象（包括对wi-fi,net等连接的管理）
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        Log.d("dyh--connectivityManager-->", "connectivityManager--start");
        if (connectivityManager == null){
            return false;
        } else {
            // 获取NetworkInfo对象
        	Log.d("dyh--connectivityManager-->", "connectivityManager is not null");
        	NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        	Log.d("dyh--networkInfo-->", "networkInfo----start");
        	if(networkInfo != null && networkInfo.isConnected() && networkInfo.isAvailable()){
        		Log.d("dyh--networkInfo-->", "networkInfo is not null");
        		return true;
        	}
//            NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
//            if (networkInfo != null && networkInfo.length > 0){
//            	for (int i = 0; i < networkInfo.length; i++) {
//                    // 判断当前网络状态是否为连接状态
//                    if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED){
//                        return true;
//                    }
//                }
//            }
        }
        return false;
    }
    
    /**
     * 获取时间格式化
     * 
     * @author   long
     * @return
     * @return String
     * @exception
     * @author   long
     * @since 1.0.0
     * @date 2015年12月28日 下午7:07:42
     */
    @SuppressLint("SimpleDateFormat")
	public static String getDateInfo(){
    	try{
    		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd  EEEE  HH:mm");
        	return dateFormat.format(new Date());
    	} catch(Exception e){
    		e.printStackTrace();
    	}
    	return "";
    }
    
    /**
     * 读取默认配置
     * 
     * @author   long
     * @param activity
     * @param key
     * @return
     * @return String
     * @exception
     * @author   long
     * @since 1.0.0
     * @date 2015年12月29日 下午3:42:10
     */
    public static String getSharedPreferenceConfig(Context context, String key){
    	SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
    	return sharedPref.getString(key, "");
    }
    
    /**
     * 设置喜好数据
     * 
     * @author   long
     * @param context
     * @param key
     * @param value
     * @return void
     * @exception
     * @author   long
     * @since 1.0.0
     * @date 2016年5月14日 下午2:58:53
     */
    public static void setSharedPreferenceConfig(Context context, String key, String value){
    	SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
    	Editor editor = sharedPref.edit();
    	editor.putString(key, value);
    	editor.commit();
    }
    
    /**
     * MD5加密算法
     * 
     * @author   long
     * @param msg
     * @return
     * @return String
     * @exception
     * @author   long
     * @since 1.0.0
     * @date 2016年1月4日 下午3:51:19
     */
    public static String md5(String msg){
    	byte[] hash;
    	try {
    		hash = MessageDigest.getInstance("MD5").digest(msg.getBytes("UTF-8"));
    	} catch (NoSuchAlgorithmException e) {
    		throw new RuntimeException("Huh, MD5 should be supported?", e);
    	} catch (UnsupportedEncodingException e) {
    		throw new RuntimeException("Huh, UTF-8 should be supported?", e);
    	}
    	StringBuilder hex = new StringBuilder(hash.length * 2);
    	for (byte b : hash) {
    		if ((b & 0xFF) < 0x10) hex.append("0");
    		hex.append(Integer.toHexString(b & 0xFF));
    	}
    	return hex.toString();
	}
    
    /**
     * 获取文件后缀名称
     * 
     * @author   long
     * @param filename
     * @return
     * @return String
     * @exception
     * @author   long
     * @since 1.0.0
     * @date 2016年4月23日 下午12:48:07
     */
    public static String getExtensionName(String filename) {   
        if ((filename != null) && (filename.length() > 0)) {   
            int dot = filename.lastIndexOf('.');   
            if ((dot >-1) && (dot < (filename.length() - 1))) {   
                return filename.substring(dot);   
            }   
        }   
        return "";   
    } 
    
    public static String getUrlFileName(String FileUrl) {
    	if ((FileUrl != null) && (FileUrl.length() > 0)) {
    		int dot = FileUrl.lastIndexOf('/');
    		if ((dot >-1) && (dot < (FileUrl.length() - 1))) {   
                return FileUrl.substring(dot);   
            }   
    	}
    	return "";
    }
    
    public static String getSystemPro() {
		String result = null;
		try {
			Class cls = Class.forName("android.os.SystemProperties");
			Object invoker = cls.newInstance();
			Method method = cls.getMethod("get", new Class[] { String.class, String.class });
			result = (String) method.invoke(invoker, new Object[] { "init.svc.bootvideo", "running" });
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
    
    
    //获取厂家信息
    public static String getSystemInfo() {
    	String product = null;
		String cmd1 = "getprop ro.product.manufacturer";
		try {
			Process process = Runtime.getRuntime().exec(cmd1);
			InputStreamReader ir = new InputStreamReader(process.getInputStream());
			BufferedReader input = new BufferedReader(ir);
			
			while((product = input.readLine()) != null){
				Log.i("111111",product);
			}

			} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			}
		return product;
    }
    
    public static String getChipsInfo() {
		String chips = null;
		String cmd = "getprop ro.product.name";
		try {
			Process process = Runtime.getRuntime().exec(cmd);
			InputStreamReader ir = new InputStreamReader(process.getInputStream());
			BufferedReader input = new BufferedReader(ir);
			
			while((chips = input.readLine()) != null){
				Log.i("DDD",chips);
			}

			} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			}
		return chips;
	}
    
    public static String getJZSystemPro() {
		String result = null;
		try {
			Class cls = Class.forName("android.os.SystemProperties");
			Object invoker = cls.newInstance();
			Method method = cls.getMethod("get", new Class[] { String.class, String.class });
			result = (String) method.invoke(invoker, new Object[] { "service.bootanim.exit", "0" });
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
    
	public static int getSDKVersion() {
		int version = 0;
		try {
			version = Integer.valueOf(android.os.Build.VERSION.SDK);
		} catch (NumberFormatException e) {
		}
		return version;
	}

	/**
	 * 判断APK是否安装
	 * @param context
	 * @param uri
	 * @return
	 */
	public static boolean isAppInstalled(Context context, String uri){
		PackageManager pm = context.getPackageManager();
		boolean installed = false;
		try{
			pm.getPackageInfo(uri,PackageManager.GET_ACTIVITIES);
			installed =true;
		}catch(PackageManager.NameNotFoundException e){
			installed =false;
		}
		return installed;
	}
}
